package com.smartfast4j.manager.modules.sys.service;


import com.smartfast4j.common.bean.R;
import com.smartfast4j.manager.common.bean.LoginUserInfo;
import com.smartfast4j.manager.modules.sys.bean.SysUserExt;
import com.smartfast4j.pojo.sys.SysUser;
import com.smartfast4j.pojo.sys.SysUserExample;

import java.util.List;

public interface SysUserService {
    int countByExample(SysUserExample example);

    SysUser selectByPrimaryKey(Long id);

    List<SysUser> selectByExample(SysUserExample example);

    int deleteByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(SysUser record);

    int updateByPrimaryKey(SysUser record);

    int deleteByExample(SysUserExample example);

    int updateByExampleSelective(SysUser record, SysUserExample example);

    int updateByExample(SysUser record, SysUserExample example);

    int insert(SysUser record);

    int insertSelective(SysUser record);

    int insertBatchSelective(List<SysUser> records);

    int updateBatchByPrimaryKeySelective(List<SysUser> records);

    /**
     * 获取当前登录的系统用户
     * @return
     */
    LoginUserInfo getCurrLoginUser();

    /**
     * 根据用户ID查询用户的所有权限
     * @param userId 用户ID
     * @return List<String>
     */
    List<String> getUserPermsByUserId(Long userId);

    /**
     * 用户登录
     * @param username 用户名
     * @param password 密码
     * @return R
     */
    R login(String username, String password) ;

    /**
     * 退出登录
     * @param token
     */
    void logout(String token);

    /**
     * 修改用户密码
     * @param sysLoginUserId
     * @param password
     * @param newPassword
     * @return
     */
    int updatePassword(Long sysLoginUserId, String password, String newPassword);

    /**
     * 保存用户
     * @param sysUserExt
     */
    void save(SysUserExt sysUserExt);

    /**
     * 更新用户
     * @param sysUserExt
     */
    void update(SysUserExt sysUserExt);

    /**
     * 删除
     * @param idList
     */
    void delete(Long deleteUserId, List<Long> idList);


    /**
     * 禁用
     * @param loginUserId
     * @param idList
     */
    void forbid(Long loginUserId, List<Long> idList);

    /**
     * 启用
     * @param loginUserId
     * @param idList
     */
    void enable(Long loginUserId, List<Long> idList);

    /**
     * 重置用户密码
     * @param loginUserId
     * @param id
     * @param newPassword
     */
    void resetPwd(Long loginUserId, Long id, String newPassword);

    /**
     * 获取系统用户
     * @param id
     * @return
     */
    SysUser getSysUser(Long id);

    /**
     * 修改密码
     * @param loginUserId
     * @param nowPassword
     * @param newPassword
     */
    void updatePwd(Long loginUserId, String nowPassword, String newPassword);

    /**
     * 修改用户信息
     * @param sysUser
     */
    void updateUserInfo(SysUser sysUser);
}